package com.twinkle.abmsspringboot.service.impl;

import com.twinkle.abmsspringboot.entity.Contacts;
import com.twinkle.abmsspringboot.mapper.ContactsMapper;
import com.twinkle.abmsspringboot.mapper.UCMapper;
import com.twinkle.abmsspringboot.service.ContactsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * ABMS - SpringBoot
 * <p>service impl 联系人服务</p>
 * <p>service -> interface :ContactsService -> implement :ContactsServiceImpl</p>
 * <p>
 * 更新了形参变量名
 *
 * @author Twinkle
 * @version 1.0.1
 * @see com.twinkle.abmsspringboot.service.ContactsService
 * @since 15 Nov. 2020
 * @since 2 Aug. 2021
 * @since 4 Aug. 2021
 */
@Service
public class ContactsServiceImpl implements ContactsService {

    @Autowired
    protected ContactsMapper contactsMapper;
    @Autowired
    protected UCMapper ucMapper;

    /**
     * 联系人姓名模糊查询
     *
     * @param userId          当前用户 ID
     * @param paraContactName 待查询联系人姓名
     * @return 查询到的联系人列表
     */
    @Override
    public List<Contacts> selectContactLike(Integer userId, String paraContactName) {
        return contactsMapper.selectContactsLike(userId, paraContactName);
    }

    /**
     * 获取全部联系人列表
     *
     * @param userId 当前用户信息
     * @return 全部联系人列表
     */
    @Override
    public List<Contacts> selectContact(Integer userId) {
        return contactsMapper.selectContactsAll(userId);
    }

    /**
     * 添加联系人信息
     * <p>
     * 执行结果值为 true，执行成功；反之，执行失败
     *
     * @param paraContacts 待添加的联系人信息
     * @return 执行结果
     */
    @Override
    public boolean insertContacts(Contacts paraContacts) {
        int check = contactsMapper.insertContacts(paraContacts);
        if (check > 0) {
            int checkInsertContacts = ucMapper.insertUC(paraContacts.getContacts_id(), contactsMapper.selectContactsOne());
            return checkInsertContacts > 0;
        }
        return false;
    }

    /**
     * 删除联系人信息
     * <p>
     * 执行结果值为 true，执行成功；反之，执行失败
     *
     * @param paraContactsId 待删除的联系人信息 ID
     * @return 执行结果
     */
    @Override
    public boolean deleteContacts(Integer paraContactsId) {
        Integer tmp = ucMapper.selectUC(paraContactsId);
        int check = ucMapper.deleteUC(tmp);
        if (check > 0) {
            int checkDeleteContacts = contactsMapper.deleteContacts(paraContactsId);
            return checkDeleteContacts > 0;
        }
        return false;
    }

    /**
     * 更新联系人信息
     * <p>
     * 执行结果值为 true，执行成功；反之，执行失败
     *
     * @param paraContacts 待更新的联系人信息
     * @return 执行结果
     */
    @Override
    public boolean updateContacts(Contacts paraContacts) {
        int checkUpdateContacts = contactsMapper.updateContacts(paraContacts);
        return checkUpdateContacts > 0;
    }
    
}
